#ifndef DIFF_H
#define DIFF_H
#include <set>
#include "ErrorCode.h"
#include "PublicFunction.h"
#include "../myers_diff/myers.h"

namespace gitstore {

class StoreObject;

class CStoreObjectDiff
{
    using MyersDiffRes = std::vector<emattsan::myers::EditType>;
public:
    CStoreObjectDiff() = delete;

public:
    template<typename T, typename...Args>
    static ErrorStatus diff(const StoreObject& v1, const StoreObject& v2, T& res_diff, Args&&...args);
};

template<>
ErrorStatus CStoreObjectDiff::diff<std::string, const std::string&>(const StoreObject& v1, const StoreObject& v2,
                  std::string& sres_diff, const std::string& seperator);

template<>
ErrorStatus CStoreObjectDiff::diff<std::vector<std::string>>(const StoreObject& v1, const StoreObject& v2,
                  std::vector<std::string>& sres_diff);

template<>
ErrorStatus CStoreObjectDiff::diff<std::vector<size_t>>(const StoreObject& v1, const StoreObject& v2,
                  std::vector<size_t>& sres_diff);


}
#endif // DIFF_H
